切换至扫码登录

chengzhenyu 7 years ago
parent
commit
c19beffd56

+ 1 - 2
app/build.gradle

@@ -62,7 +62,7 @@ android {
62 62
             minifyEnabled false
63 63
             shrinkResources false
64 64
             buildConfigField "boolean", "isTestMode", "false"
65
-            buildConfigField "boolean", "isJumpLogin", "true"
65
+            buildConfigField "boolean", "isJumpLogin", "false"
66 66
             signingConfig signingConfigs.releaseConfig
67 67
         }
68 68
     }
@@ -84,7 +84,6 @@ dependencies {
84 84
     apt 'com.jakewharton:butterknife-compiler:8.2.1'
85 85
     compile 'com.google.code.gson:gson:2.7'
86 86
     compile files('libs/universal-image-loader-1.9.4.jar')
87
-    compile files('libs/libammsdk.jar')
88 87
     compile files('libs/commons-lang-2.6.jar')
89 88
     compile files('libs/jcc-bate-0.7.3.jar')
90 89
     compile 'com.umeng.analytics:analytics:latest.integration'

+ 36 - 3
app/src/main/java/ai/pai/lensman/login/LoginActivity.java

@@ -1,5 +1,6 @@
1 1
 package ai.pai.lensman.login;
2 2
 
3
+import android.app.Activity;
3 4
 import android.content.Intent;
4 5
 import android.os.Bundle;
5 6
 import android.support.v4.app.FragmentActivity;
@@ -11,11 +12,15 @@ import android.widget.ImageView;
11 12
 import android.widget.TextView;
12 13
 import android.widget.Toast;
13 14
 
15
+import com.android.common.utils.LogHelper;
14 16
 import com.android.views.progressbar.ProgressWheel;
15 17
 
18
+import org.json.JSONObject;
19
+
16 20
 import ai.pai.lensman.R;
17 21
 import ai.pai.lensman.activities.WebViewActivity;
18 22
 import ai.pai.lensman.main.MainActivity;
23
+import ai.pai.lensman.qrcode.QRCaptureActivity;
19 24
 import butterknife.BindView;
20 25
 import butterknife.ButterKnife;
21 26
 import butterknife.OnClick;
@@ -26,7 +31,7 @@ public class LoginActivity extends FragmentActivity implements LoginContract.Vie
26 31
     @BindView(R.id.tv_agree_protocol)  TextView protocolText;
27 32
     @BindView(R.id.iv_login_logo)      ImageView photoView;
28 33
     private LoginContract.Presenter presenter;
29
-
34
+    private static final int SCAN_WX_LOGIN_CODE = 2000;
30 35
 
31 36
     @Override
32 37
     protected void onCreate(Bundle savedInstanceState) {
@@ -36,7 +41,7 @@ public class LoginActivity extends FragmentActivity implements LoginContract.Vie
36 41
         SpannableString content = new SpannableString(getString(R.string.agree_protocol));
37 42
         content.setSpan(new UnderlineSpan(), 6, content.length(), 0);
38 43
         protocolText.setText(content);
39
-        presenter = new LoginPresenter(this,this);
44
+        presenter = new LoginPresenter(this);
40 45
     }
41 46
 
42 47
 
@@ -49,11 +54,13 @@ public class LoginActivity extends FragmentActivity implements LoginContract.Vie
49 54
     @Override
50 55
     protected void onDestroy() {
51 56
         super.onDestroy();
57
+        presenter.stop();
52 58
     }
53 59
 
54 60
     @OnClick(R.id.btn_login)
55 61
     public void login(){
56
-        presenter.login();
62
+        Intent intent = new Intent(this, QRCaptureActivity.class);
63
+        startActivityForResult(intent, SCAN_WX_LOGIN_CODE);
57 64
     }
58 65
 
59 66
     @OnClick(R.id.tv_agree_protocol)
@@ -90,4 +97,30 @@ public class LoginActivity extends FragmentActivity implements LoginContract.Vie
90 97
         finish();
91 98
     }
92 99
 
100
+    @Override
101
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
102
+        super.onActivityResult(requestCode,resultCode,data);
103
+        if (resultCode == Activity.RESULT_OK) {
104
+            if (data == null || data.getStringExtra("info") == null) {
105
+                Toast.makeText(this,R.string.scan_login_qr_error,Toast.LENGTH_SHORT).show();
106
+                return;
107
+            }
108
+            String qrInfo = data.getStringExtra("info");
109
+            if(qrInfo.contains("unionid") && qrInfo.contains("token")){
110
+                String json = qrInfo.replace(""","'");
111
+                LogHelper.d("czy","login scan qrcode = "+json);
112
+                try{
113
+                    JSONObject jsonObject = new JSONObject(json);
114
+                    String unionid = jsonObject.getString("unionid");
115
+                    String token = jsonObject.getString("token");
116
+                    presenter.login(unionid,token);
117
+                    return;
118
+                }catch (Exception e){
119
+                    LogHelper.e("czy","login deal qrcode error"+e);
120
+                }
121
+            }
122
+            Toast.makeText(this,R.string.scan_login_qr_error,Toast.LENGTH_SHORT).show();
123
+        }
124
+    }
125
+
93 126
 }

+ 1 - 1
app/src/main/java/ai/pai/lensman/login/LoginContract.java

@@ -14,7 +14,7 @@ public class LoginContract {
14 14
     }
15 15
 
16 16
     interface Presenter extends BasePresenter{
17
-        void login();
17
+        void login(String unionid, String token);
18 18
     }
19 19
 
20 20
 }

+ 32 - 154
app/src/main/java/ai/pai/lensman/login/LoginInteractor.java

@@ -1,9 +1,9 @@
1 1
 package ai.pai.lensman.login;
2 2
 
3 3
 import android.os.AsyncTask;
4
+import android.text.TextUtils;
4 5
 
5 6
 import com.android.common.executors.ThreadExecutor;
6
-import com.android.common.utils.LogHelper;
7 7
 
8 8
 import org.json.JSONObject;
9 9
 
@@ -20,183 +20,46 @@ import ai.pai.lensman.utils.UrlContainer;
20 20
 public class LoginInteractor implements BaseInteractor {
21 21
 
22 22
     private HttpPostTask loginTask;
23
-    private HttpPostTask fetchTokenTask;
24
-    private HttpPostTask fetchUserInfoTask;
25 23
     private InteractorListener<String> listener;
26
-    private static final String APP_ID = "wxf4832536d9dda70a";
27
-    private static final String APP_SECRET = "9a2efcae3c6038b5450b0c2ef3187b1f";
28
-    private String wxCode;
24
+    private String unionid;
25
+    private String token;
29 26
 
30
-    public LoginInteractor(String wxCode, InteractorListener<String> listener) {
31
-        this.wxCode = wxCode;
27
+    public LoginInteractor(String unionid, String token, InteractorListener<String> listener) {
28
+        this.unionid = unionid;
29
+        this.token = token;
32 30
         this.listener = listener;
33 31
     }
34 32
 
35 33
     @Override
36 34
     public void startJob() {
37
-        fetchToken();
38
-    }
39
-
40
-    @Override
41
-    public void cancelJob() {
42
-        cancelJob(loginTask);
43
-        cancelJob(fetchTokenTask);
44
-        cancelJob(fetchUserInfoTask);
45
-    }
46
-
47
-    private void cancelJob(HttpPostTask task) {
48
-        if (task == null) {
49
-            return;
50
-        }
51
-        if (task.getStatus() == AsyncTask.Status.RUNNING) {
52
-            task.cancel(true);
53
-        }
54
-    }
55
-
56
-    private void fetchToken() {
57
-
58
-        final String tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APP_ID
59
-                + "&secret=" + APP_SECRET + "&code=" + wxCode + "&grant_type=authorization_code";
60
-        LogHelper.d("czy","interactor fetchToken with url = "+tokenUrl);
61
-        fetchTokenTask = new HttpPostTask(null) {
62
-
63
-            String token;
64
-            String openId;
65
-
66
-            @Override
67
-            protected boolean parseResponse(String response) {
68
-                LogHelper.d("czy","interactor fetchToken parseResponse response = "+response);
69
-                try {
70
-                    JSONObject json = new JSONObject(response);
71
-                    token = json.getString("access_token");
72
-                    openId = json.getString("openid");
73
-                    return true;
74
-                } catch (Exception e) {
75
-                    e.printStackTrace();
76
-                }
77
-                return false;
78
-            }
79
-
80
-            @Override
81
-            protected void onPostSuccess() {
82
-                super.onPostSuccess();
83
-                fetchUserInfo(token, openId);
84
-            }
85
-
86
-            @Override
87
-            protected void onPostFail() {
88
-                super.onPostFail();
89
-            }
90
-        };
91
-        fetchTokenTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), tokenUrl);
92
-    }
93
-
94
-    private void fetchUserInfo(String token, String openId) {
95
-
96
-        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + token + "&openid=" + openId;
97
-        LogHelper.d("czy","interactor fetchUserInfo with url = "+userInfoUrl);
98
-        fetchUserInfoTask = new HttpPostTask(null) {
99
-            HashMap<String, String> params;
100
-
101
-            @Override
102
-            protected boolean parseResponse(String response) {
103
-                LogHelper.d("czy","interactor fetchUserInfo parseResponse response = "+response);
104
-                try {
105
-                    JSONObject json = new JSONObject(response);
106
-                    params = new HashMap<>();
107
-                    params.put("unionid", json.getString("unionid"));
108
-                    params.put("openid", json.getString("openid"));
109
-                    params.put("sex", json.getString("sex"));
110
-                    params.put("nickname", json.getString("nickname"));
111
-                    params.put("headimgurl", json.getString("headimgurl"));
112
-                    params.put("country", json.getString("country"));
113
-                    params.put("province", json.getString("province"));
114
-                    params.put("city", json.getString("city"));
115
-                    return true;
116
-                } catch (Exception e) {
117
-                    e.printStackTrace();
118
-                }
119
-                return false;
120
-            }
121
-
122
-            @Override
123
-            protected void onPostSuccess() {
124
-                super.onPostSuccess();
125
-                wxLogin(params);
126
-            }
127
-
128
-            @Override
129
-            protected void onPostFail() {
130
-                super.onPostFail();
131
-            }
132
-        };
133
-        fetchUserInfoTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), userInfoUrl);
134
-    }
135
-
136
-    private void login() {
137 35
         HashMap<String, String> params = new HashMap<>();
138
-        params.put("username", "chengzhenyu");
139
-        params.put("password", "paiai");
36
+        params.put("unionid", unionid);
37
+        params.put("token", token);
140 38
 
141 39
         loginTask = new HttpPostTask(params) {
142 40
 
143 41
             String lensmanId;
144 42
             String message;
145
-
146
-            @Override
147
-            protected boolean parseResponse(String response) {
148
-                try {
149
-                    JSONObject json = new JSONObject(response);
150
-                    int status = json.getInt("status");
151
-                    if (status == 200) {
152
-                        JSONObject info = json.getJSONObject("data");
153
-                        lensmanId = info.getString("user_id");
154
-                        return true;
155
-                    } else {
156
-                        message = json.getString("message");
157
-                    }
158
-                } catch (Exception e) {
159
-                    e.printStackTrace();
160
-                }
161
-                return false;
162
-            }
163
-
164
-            @Override
165
-            protected void onPostFail() {
166
-                super.onPostFail();
167
-                listener.onInteractFail(message);
168
-            }
169
-
170
-            @Override
171
-            protected void onPostSuccess() {
172
-                super.onPostSuccess();
173
-                listener.onInteractSuccess(lensmanId);
174
-            }
175
-        };
176
-        loginTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.LOGIN_URL);
177
-    }
178
-
179
-    private void wxLogin(HashMap<String, String> params) {
180
-
181
-        loginTask = new HttpPostTask(params) {
182
-
183
-            String lensmanId;
184 43
             String userName;
185
-            String message;
186 44
 
187 45
             @Override
188 46
             protected boolean parseResponse(String response) {
189
-                LogHelper.d("czy","interactor wxLogin parseResponse response = "+response);
190 47
                 try {
191 48
                     JSONObject json = new JSONObject(response);
192 49
                     int status = json.getInt("status");
193 50
                     if (status == 200) {
194 51
                         JSONObject info = json.getJSONObject("data");
195 52
                         lensmanId = info.getString("user_id");
196
-                        userName = info.getString("nickname");
53
+                        userName = info.getString("name");
54
+                        if(TextUtils.isEmpty(userName)){
55
+                            userName = info.getString("nickname");
56
+                        }
57
+                        if(TextUtils.isEmpty(userName)){
58
+                            userName = info.getString("username");
59
+                        }
197 60
                         return true;
198 61
                     } else {
199
-                        message = json.getString("message");
62
+                        message = json.getString("description");
200 63
                     }
201 64
                 } catch (Exception e) {
202 65
                     e.printStackTrace();
@@ -218,7 +81,22 @@ public class LoginInteractor implements BaseInteractor {
218 81
                 Preferences.getInstance().setUserName(userName);
219 82
             }
220 83
         };
221
-        loginTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.WX_LOGIN_URL);
84
+        loginTask.executeOnExecutor(ThreadExecutor.getInstance().getExecutor(), UrlContainer.BOX_LENSMAN_LOGIN_URL);
222 85
     }
223 86
 
87
+    @Override
88
+    public void cancelJob() {
89
+        cancelJob(loginTask);
90
+    }
91
+
92
+    private void cancelJob(HttpPostTask task) {
93
+        if (task == null) {
94
+            return;
95
+        }
96
+        if (task.getStatus() == AsyncTask.Status.RUNNING) {
97
+            task.cancel(true);
98
+        }
99
+    }
100
+
101
+
224 102
 }

+ 9 - 27
app/src/main/java/ai/pai/lensman/login/LoginPresenter.java

@@ -1,13 +1,9 @@
1 1
 package ai.pai.lensman.login;
2 2
 
3
-import android.content.Context;
4
-import android.text.TextUtils;
5
-
6 3
 import com.android.common.utils.LogHelper;
7
-import com.tencent.mm.sdk.modelmsg.SendAuth;
8
-import com.tencent.mm.sdk.openapi.IWXAPI;
9
-import com.tencent.mm.sdk.openapi.WXAPIFactory;
10 4
 
5
+import ai.pai.lensman.App;
6
+import ai.pai.lensman.R;
11 7
 import ai.pai.lensman.base.BaseInteractor;
12 8
 import ai.pai.lensman.db.Preferences;
13 9
 
@@ -16,39 +12,24 @@ import ai.pai.lensman.db.Preferences;
16 12
  */
17 13
 public class LoginPresenter implements LoginContract.Presenter,BaseInteractor.InteractorListener<String> {
18 14
 
19
-    private   IWXAPI api;
20
-    private Context context;
21 15
     private LoginContract.View view;
22 16
     private LoginInteractor interactor;
23
-    private static final String APP_ID = "wxf4832536d9dda70a";
24 17
 
25
-    public LoginPresenter(Context context,LoginContract.View view){
18
+    public LoginPresenter(LoginContract.View view){
26 19
         this.view = view;
27
-        this.context = context;
28
-        api = WXAPIFactory.createWXAPI(context, APP_ID, true);
29
-        api.registerApp(APP_ID);
30 20
     }
31 21
 
32 22
     @Override
33
-    public void login() {
23
+    public void login(String unionid, String token) {
34 24
         LogHelper.d("czy","presenter login");
35
-
36
-        SendAuth.Req req = new SendAuth.Req();
37
-        req.scope = "snsapi_userinfo";
38
-        req.state = "paiai_for_lensman";
39
-        api.sendReq(req);
25
+        view.showProgressView();
26
+        interactor = new LoginInteractor(unionid,token,this);
27
+        interactor.startJob();
40 28
     }
41 29
 
42 30
     @Override
43 31
     public void start() {
44
-        String wxCode = Preferences.getInstance().getWXCode();
45
-        LogHelper.d("czy","presenter start with wx code = "+wxCode);
46
-        if(!TextUtils.isEmpty(wxCode)){
47
-            view.showProgressView();
48
-            interactor = new LoginInteractor(wxCode,this);
49
-            interactor.startJob();
50
-            Preferences.getInstance().setWXCode("");
51
-        }
32
+
52 33
     }
53 34
 
54 35
     @Override
@@ -62,6 +43,7 @@ public class LoginPresenter implements LoginContract.Presenter,BaseInteractor.In
62 43
     @Override
63 44
     public void onInteractSuccess(String result) {
64 45
         view.hideProgressView();
46
+        view.showLoginHint(App.getAppContext().getString(R.string.login_success));
65 47
         Preferences.getInstance().setLensManId(result);
66 48
         view.jumpMain();
67 49
     }

+ 1 - 6
app/src/main/java/ai/pai/lensman/utils/UrlContainer.java

@@ -11,8 +11,6 @@ public class UrlContainer {
11 11
 
12 12
     public static final String LOGIN_URL = HOST_URL+"login";
13 13
 
14
-    public static final String SESSION_IDS_CREATE = HOST_URL+"uuid";
15
-
16 14
     /**
17 15
      * user_id  # 用户唯一标识
18 16
      * nickname  # 用户昵称
@@ -71,9 +69,6 @@ public class UrlContainer {
71 69
 
72 70
     public static final String SERVER_TIME_URL=HOST_URL+"s/server_time";
73 71
 
74
-    /**
75
-     * 盒子程序版本信息
76
-     */
77
-    public static final String BOX_VERSION_URL = HOST_URL+"op/bpversion";
72
+    public static final String BOX_LENSMAN_LOGIN_URL = HOST_URL+"box/loginqr";
78 73
 
79 74
 }

+ 1 - 1
app/src/main/res/layout/activity_login.xml

@@ -47,7 +47,7 @@
47 47
             android:layout_marginBottom="50dp"
48 48
             android:background="@drawable/login_btn_rounded_rect_bg"
49 49
             android:gravity="center"
50
-            android:text="@string/wx_login"
50
+            android:text="@string/wx_scan_login"
51 51
             android:textColor="@color/wx_login_btn_stroke"
52 52
             android:textSize="18sp" />
53 53
 

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -12,6 +12,7 @@
12 12
     <string name="settings">设置</string>
13 13
     <string name="scene">场景%d</string>
14 14
 
15
+    <string name="wx_scan_login">扫描拍爱公众号授权码</string>
15 16
     <string name="wx_login">微信登录</string>
16 17
     <string name="agree_protocol">已阅读并同意<u>拍爱用户协议</u></string>
17 18
 
@@ -143,4 +144,6 @@
143 144
     <string name="usb_permission_denied">请检查设备是否已开放root权限</string>
144 145
 
145 146
     <string name="sdcard_error">保存照片失败,请检查手机存储卡</string>
147
+
148
+    <string name="scan_login_qr_error">扫描授权码失败</string>
146 149
 </resources>